介紹
docker 把環境包裝起來程式碼攜帶跨不同平台使用非常方便,讓應用程式布署在軟體容器下的工作可以自動化,基底是Linux作業系統,但也可以在window底下執行,使用headless的Chrome Linux在Docker容器中運行Puppeteer會比較麻煩。Puppeteer 安裝的 Chromium 缺少必要的package。為了解決這個問題,需要在 Dockerfile 中安裝最新版本的Chrome開發器
dockerfile 是一個提供環境編譯的腳本,底下就是要編譯可以讓Puppeteer正常執行的時候要再額外安裝的部分
除了 apt-get install 要安裝的部分 還要給他一些權限 這個dockerfile部分
FROM 就是採用哪一個基底的image
RUN 就是執行linux的指令
USER 預設的使用者
CMD 就是預設要跑起來的指令
FROM node:8-slim
RUN apt-get update && apt-get install -yq libgconf-2-4
RUN apt-get update && apt-get install -y wget --no-install-recommends \
&& wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
&& apt-get update \
&& apt-get install -y google-chrome-unstable \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get purge --auto-remove -y curl \
&& rm -rf /src/*.deb
RUN yarn add puppeteer
RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \
&& mkdir -p /home/pptruser/Downloads \
&& chown -R pptruser:pptruser /home/pptruser \
&& chown -R pptruser:pptruser /node_modules
USER pptruser
CMD ["google-chrome-unstable"]
以上腳本完成後就build出一個images檔案
docker build -t puppeteer-chrome-linux .
這邊的node -e 的部分可以把 script 透過環境變數包裝進去
docker run -i --rm --cap-add=SYS_ADMIN \
--name puppeteer-chrome puppeteer-chrome-linux \
node -e "`cat yourscript.js`"
總結
通常會包裝成docker 就是為了部署方便,如果今天有100隻爬蟲想要部署到許多不同的server環境取得不同的ip,透過這樣的部署方式只需要給docker 環境變數就可以達成部署作業
github docker 參考
https://github.com/ebidel/try-puppeteer